<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // es5的面向对象
        // function Obj1(name,age){
        //     // 这里的this指向构造函数本身，相当于向对象添加属性和属性值
        //     this.name=name
        //     this.age=age
        // }
        // // 在构造函数的原型上添加方法   通过函数名.方法名()就能调用这个方法
        // Obj1.prototype.getname=function (){
        //     console.log(this.name);
        // }
        // // 向构造函数传递参数
        // let aaa=new Obj1('张三',18);    //结果是对象形式的数据
        // aaa.getname()      //调用方法打印当前构造函数中的name


        // es6的面向对象 用class声明一个类  比es5的更简洁，少写很多代码
        // class Obj1{
        //     // 接收传递过来的数据并把数据放在构造函数上面
        //     constructor(name,age){
        //         this.name=name;
        //         this.age=age;
        //     }
        //     // 直接写方法把方法放在构造函数的原型（prototype）上   方法中的this指向当前的构造函数 
        //     getname(){
        //         console.log(this.getname);
        //     }
        // }

        // let aaa = new Obj1('小刘',18)
        // aaa.getname()   //调用方法打印name
        // console.log(aaa);

        // 父类
        class Obj1 {
            constructor(name, age) {
                this.name = name;
                this.age = age;
            }
            getname() {
                console.log(this.name);
            }
        }
        // 子类继承父类的属性和方法
        class Obj2 extends Obj1 {
            // 当前类的构造函数
            constructor(name, age) {
                super(name,age)
                this.sex="男"
            }
            // 获取性别方法
            getsex() {
                console.log(this.sex);
            }
        }
        // new实例化构造函数
        var aaa = new Obj2('小刘', 18)
        aaa.getname()   //调用方法打印name
        aaa.getsex()  //调用方法获取性别
    </script>
</body>

</html>